package com.tgm.controller;
import com.tgm.service.UserInfoService;
import org.springframework.ai.chat.client.ChatClient;
import org.springframework.ai.chat.prompt.Prompt;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.context.properties.bind.DefaultValue;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import reactor.core.publisher.Flux;

import java.util.List;

import static com.tgm.config.AIPromptConfig.GROUP_ANALYSIS_PROMPT;
import static com.tgm.config.AIPromptConfig.USER_ANALYSIS_PROMPT;

/*
 * AI智能分析Controller
 */
@RestController
@RequestMapping("/ai")
public class AIAnalysisController {


    private final ChatClient chatClient;
    public AIAnalysisController(ChatClient.Builder builder) {
        this.chatClient = builder.build();
    }

    @Autowired
    private UserInfoService userInfoService;


    /**
     * 生成个体消费习惯画像
     * @param userId 用户ID
     * @param startTime 开始时间（如2025-01-01）
     * @param endTime 结束时间（如2025-10-31）
     */
    @GetMapping(value = "/user-portrait",produces = MediaType.TEXT_EVENT_STREAM_VALUE)
    public Flux<String> getUserPortrait(String userId, String startTime, String endTime) {
        // 1. 获取用户消费数据的结构化文本
        String userData = userInfoService.getUserConsumptionText(userId, startTime, endTime);

        // 2. 构建提示词（引导AI按业务维度分析）
        String prompt = USER_ANALYSIS_PROMPT.formatted(userData);

        // 3. 调用AI生成结果
//        String content = chatClient.prompt()
//                .user(prompt)
//                .call()
//                .content();
        Prompt prompt1 = new Prompt(prompt); //流式输出
        return chatClient.prompt(prompt1).stream().chatResponse().map(response -> response.getResult().getOutput().getContent());
    }


    /**
     * 获取群体特征
     * @param department 学院名称
     * @param grade 年级名称
     */
    @GetMapping(value = "group-features",produces = MediaType.TEXT_EVENT_STREAM_VALUE)
    public Flux<String> getGroupFeatures(@DefaultValue("") String department ,@DefaultValue("") String grade){
        String groupConsumeFeaturesText = userInfoService.getGruopFeatures(department, grade);

        // 3. 调用AI生成群体特征（提示词明确要求标签和核心特征）
        String prompt = GROUP_ANALYSIS_PROMPT.formatted(groupConsumeFeaturesText);

//        String content = chatClient.prompt()
//                .user(prompt)
//                .call()
//                .content();
        Prompt prompt1 = new Prompt(prompt);
        return chatClient.prompt(prompt1).stream().chatResponse().map(response -> response.getResult().getOutput().getContent());
    }
}
